#include <iostream>
#include <cstdio>
#include <unistd.h>
using namespace std;

class Date
{
public:
    Date(int year = 0, int month = 1, int day = 1);//构造函数
    Date(const Date &d);//拷贝构造
    //运算符重载——只要成员函数中不需要修改成员变量最好都加上const，加上const之后const对象和非const对象都可以调用
    Date &operator=(const Date &d);
    bool operator==(const Date &d) const;
    bool operator>(const Date &d) const;
    bool operator>=(const Date &d) const;
    bool operator<(const Date &d) const;
    bool operator<=(const Date &d) const;
    bool operator!=(const Date &d) const;

    //日期与天数的运算
    Date operator+(int day) const;
    Date &operator+=(int day);
    Date operator-(int day) const;
    Date &operator-=(int day);

    Date& operator++();//前置加加
    Date operator++(int);//后置加加
    Date& operator--();//前置减减
    Date operator--(int);//后置减减
    int operator-(const Date& d) const;//日期-日期的运算

    //取地址重载
    Date* operator&();
    const Date* operator&() const; 

    void Print() const; //打印年月日
    //void operator<<(ostream& out);//不用友元重载<<
    static int GetMonthDay(const int& year, const int& month); //返回当月的天数
    static bool LeapYear(const int& year);// 判断当前年份是不是闰年

    //友元函数
    friend ostream& operator<<(ostream& out,const Date& d);
    friend istream& operator>>(istream& in, Date& d);

    ~Date();//析构函数

private:
    int _year;  // 年
    int _month; // 月
    int _day;   // 日
    static int n;
};
